/*
   file : shm_interface.h 
   University of Jiangsu
   memoryDB      2010.6
 */



#ifndef _MMDB_SHM_INTERFACE_HEAD_H
#define _MMDB_SHM_INTERFACE_HEAD_H

#include"def_head.h"

/**/
int create_db();

/**/
int delete_db();

/**/
int open_db();

/*根据给定的Table结构,创建表及其列,成功返回1*/
int CreateTable(Table *T);

/**/
int delete_tb(int tb_id);

/*参数为表名称
  检查某表是否存在,存在返回其tb_id,不存在返回-1*/
int ExitsTable(char *table_name);

/**/
int load_file();

/*根据给定表id,从磁盘打开相应数据文件,然后载入到内存*/
int load_record(int);

/*根据数据库名称和密码,从磁盘载入相应字典文件到存在,并初始化相关全局指针*/
int load_dict_and_init(char *,char *);

/*获取给定表的第一条记录的地址并返回*/
record_add Get_First_Record(int tb_id);

/*给定某条记录的地址,获得并返回下一条可用(非空)记录的地址*/
record_add Get_Next_Add(record_add record_add);

/*根据给定的记录地址,获取记录填充record结构,并返回下一条可用(非空)记录的地址*/
record_add Get_Record(record_add record_add, Record *record);

/*给定一条记录的地址,删除这条记录*/
void Delete_Record(record_add);

/*给定一条记录的Record结构,将其转换成char *类型，以便存入内存.(调用insert_record前先调用本函数处理)*/
void Combine_Record_To_String(Record *record, char *content);

/*插入一条记录(char *类型)*/
int insert_record(char *content, int tb_id);

/*给定一条记录的地址和一个record结构,更新记录*/
void Update_Record(record_add record_add, Record *new_record);

int find_free_space(int,record_add);




/*参数为表名称和列名称
  检查表中是否存在某个字段,存在返回colu_id,不存在返回-1(表不存在)或-2(列不存在)*/
int ExistField(char *table_name, char *field_name);

/*根据给定表和列名,返回列类型*/
int Field_DateType(char *tb_name, char *field_name);

/*根据给定的记录地址,和所要获取的列id,获取这条记录中的这个列的内容,并将其填充field中*/
void Get_Field_Content(record_add record_add, int field_id, Field *field);

/*根据给定的表id,获取这个表的列的数目*/
int Get_Field_Num(int tb_id);

/*根据给定的表id和列id,获得这个列的结构信息,将其填入field结构中*/
int Get_Field(int tb_id, int field_id, Field *field);




/**/
int change_pwd();

/**/
int remove_db();

/**/
void quit_sys();

/**/
int save_record_to_disk(int tb_id);

/**/
int save_all(int);

/**/
void see_help(int);


/*查询当前打开的数据库信息*/
int db_info(int);


/*获得当前打开数据库的某一表的记录、块信息*/
int tb_block_numbers(int tb_id, unsigned long *block_count, unsigned long *record_count, unsigned long *free_count);


#endif

